Librerías

library(tidyverse)
library(data.table)
library(readxl)
library(GGally)
library(leaflet)
library(raster)
library(mltools)

Lectura de datos

raw_encuesta <- fread("databases/calidad_vida_ok.csv", encoding = "UTF-8") %>% 
  as_tibble()

# Unificación de las estadísticas de los barrios "ALTAVISTA" y "CABECERA ALTAVISTA"

raw_encuesta <- raw_encuesta %>% mutate(
  encuesta_calidad.barrio = case_when(
    encuesta_calidad.barrio == "CABECERA ALTAVISTA" ~ "ALTAVISTA",
    encuesta_calidad.barrio == "CIUDADELA NUEVO OCCIDENTE" ~ "CABECERA URBANA CORREGIMIENTO SAN CRISTÓBAL",
    encuesta_calidad.barrio == "AREA DE EXPANCION SAN CRISTOBAL" ~ "ÁREA DE EXPANSIÓN SAN CRISTÓBAL",
    encuesta_calidad.barrio == "CABECERA SAN CRISTÓBAL" ~ "CABECERA URBANA CORREGIMIENTO SAN CRISTÓBAL",
    encuesta_calidad.barrio == "SAN CRISTOBAL" ~ "CABECERA URBANA CORREGIMIENTO SAN CRISTÓBAL",
    encuesta_calidad.barrio == "PROGRESO  Nº 2" ~ "PROGRESO",
    TRUE ~ encuesta_calidad.barrio
  )
)

# One-hot encoding para variable estudio

variables_categoricas <- raw_encuesta[, c("encuesta_calidad.p_45")] %>% mutate(
  encuesta_calidad.p_45 = as.factor(encuesta_calidad.p_45)
) %>% rename(
  nivel_estudio = encuesta_calidad.p_45 
)

variables_categoricas_encoding <- one_hot(as.data.table(variables_categoricas))

raw_encuesta <- data.frame(raw_encuesta, variables_categoricas_encoding)

Creación de la base de datos

#Agregación de las variables

db_escolaridad <- raw_encuesta %>% 
  mutate(encuesta_calidad.barrio = str_replace(encuesta_calidad.barrio, "ANDALUCIA", "ANDALUCÍA") %>% 
  str_replace("Nº 2", "NO.2") %>% 
  str_replace("Nº 1", "NO.1") %>% 
  str_replace("Nº 3", "NO.3") %>%
  str_replace("AREA EXPANSION", "ÁREA DE EXPANSIÓN") %>%
  str_replace("EXPANCION", "EXPANSIÓN") %>% 
  str_replace("AREA", "ÁREA") %>% 
  str_replace("BOMBONA", "BOMBONÁ") %>% 
  str_replace("LA ASOMADERA", "ASOMADERA") %>%
  str_replace("BELALCAZAR", "BELALCÁZAR") %>% 
  str_replace("CALAZANS", "CALASANZ") %>% 
  str_replace("COLON", "COLÓN") %>% 
  str_replace("MIRA FLORES", "MIRAFLORES") %>% 
  str_replace("BARRIO FACULTAD DE MINAS", "FACULTAD DE MINAS") %>% 
  str_replace("CABECERA SAN ANT DE PR.", "SAN ANTONIO DE PRADO") %>% 
  str_replace("CARLOS E RESTREPO", "CARLOS E. RESTREPO") %>% 
  str_replace("URQUITA", "URQUITÁ") %>% 
  str_replace("LOS CERROS EL VERJEL", "LOS CERROS EL VERGEL") %>% 
  str_replace("CAYCEDO", "CAICEDO") %>% 
  str_replace("VALDES", "VALDÉS") %>% 
  str_replace("CERRO EL VOLADOR", "B. CERRO EL VOLADOR") %>% 
  str_replace("MOSCU", "MOSCÚ") %>% 
  str_replace("JOSELA", "JOSÉ LA") %>%
  str_replace("JOSE", "JOSÉ") %>% 
  str_replace("EL YOLOMBO", "YOLOMBO") %>% 
  str_replace("PIEDRAS BLANCAS", "PIEDRAS BLANCAS - MATASANO") %>% 
  str_replace("BASILIA", "BRASILIA") %>% 
  str_replace("VILLA TINA", "VILLATINA") %>% 
  str_replace("LILIAM", "LILLIAM") %>% 
  str_replace("BOLIVAR", "BOLÍVAR") %>% 
  str_replace("CORREGIMIENTO PALMITAS", "PALMITAS SECTOR CENTRAL") %>% 
  str_replace("INES", "INÉS") %>% 
  str_replace("FE", "FÉ") %>% 
  str_replace("LUCIA", "LUCÍA") %>% 
  str_replace("SABIO", "SAVIO") %>% 
  str_replace("BERMEJAL- LOS ÁLAMOS", "BERMEJAL-LOS ÁLAMOS") %>% 
  str_replace("BOLÍVARIANA", "BOLIVARIANA") %>% 
  str_replace("EL NOGAL - LOS ALMENDROS", "EL NOGAL-LOS ALMENDROS") %>% 
  str_replace("JUAN XXIII - LA QUIEBRA", "JUAN XXIII LA QUIEBRA") %>% 
  str_replace("PROGRESO  Nº 2", "EL PROGRESO") %>% 
  str_replace("MARIA", "MARÍA") %>% 
  str_replace("PLAYÓN", "PLAYON") %>% 
  str_replace("EL SOCORRO / LA GABRIELA", "EL SOCORRO") %>% 
  str_replace("FÉRRINI", "FERRINI") %>% 
  str_replace("LA CANDE LARIA", "LA CANDELARIA") %>%
  str_replace("EL PLAYON", "PLAYÓN") %>%
  str_replace("IGUANA", "IGUANÁ") %>%
  str_replace("MARÍA CANO - CARAMBOLAS", "MARÍA CANO-CARAMBOLAS") %>%
  str_replace("DE ABURRA", "DEL ABURRÁ") %>%
  str_replace("ALTAVISTA CENTRAL", "ALTAVISTA SECTOR CENTRAL") %>%
  str_replace("SECTOR CENTRAL", "CENTRO ADMINISTRATIVO") %>%
  str_replace("ALTAVISTA CENTRO ADMINISTRATIVO", "ALTAVISTA SECTOR CENTRAL") %>%
  str_replace("SANTA ELENA CENTRO ADMINISTRATIVO", "SANTA ELENA SECTOR CENTRAL") %>%
  str_replace("PALMITAS CENTRO ADMINISTRATIVO", "PALMITAS SECTOR CENTRAL") %>%  
  str_replace("PROGRESO", "EL PROGRESO")
  ) %>% 
  group_by(encuesta_calidad.barrio, encuesta_calidad.comuna) %>% 
  summarize(n = n(), edad_promedio = mean(`encuesta_calidad.p_18`, na.rm = TRUE),
            proporcion_lectoescritura = sum(`encuesta_calidad.p_35` == 1, na.rm = TRUE) / sum(!is.na(`encuesta_calidad.p_35`), na.rm = TRUE),
            proporcion_escolaridad_actual = sum(`encuesta_calidad.p_36` == 1, na.rm = TRUE) / sum(!is.na(`encuesta_calidad.p_36`), na.rm = TRUE),
            estudio_ultimo_ano = sum(`encuesta_calidad.p_37` == 1, na.rm = TRUE) / sum(!is.na(`encuesta_calidad.p_37`), na.rm = TRUE),
            proporcion_instituciones_publicas = sum(`encuesta_calidad.p_49` == 1, na.rm = TRUE) / sum(!is.na(`encuesta_calidad.p_49`), na.rm = TRUE),
            proporcion_nivel_estudio_0 = sum(`nivel_estudio_0` == 1, na.rm = TRUE) / sum(!is.na(`nivel_estudio_0`), na.rm = TRUE),
            proporcion_nivel_estudio_1 = sum(`nivel_estudio_1` == 1, na.rm = TRUE) / sum(!is.na(`nivel_estudio_1`), na.rm = TRUE),
            proporcion_nivel_estudio_2 = sum(`nivel_estudio_2` == 1, na.rm = TRUE) / sum(!is.na(`nivel_estudio_2`), na.rm = TRUE),
            proporcion_nivel_estudio_3 = sum(`nivel_estudio_3` == 1, na.rm = TRUE) / sum(!is.na(`nivel_estudio_3`), na.rm = TRUE),
            proporcion_nivel_estudio_4 = sum(`nivel_estudio_4` == 1, na.rm = TRUE) / sum(!is.na(`nivel_estudio_4`), na.rm = TRUE),
            proporcion_nivel_estudio_5 = sum(`nivel_estudio_5` == 1, na.rm = TRUE) / sum(!is.na(`nivel_estudio_5`), na.rm = TRUE),
            proporcion_nivel_estudio_6 = sum(`nivel_estudio_6` == 1, na.rm = TRUE) / sum(!is.na(`nivel_estudio_6`), na.rm = TRUE),
            proporcion_nivel_estudio_7 = sum(`nivel_estudio_7` == 1, na.rm = TRUE) / sum(!is.na(`nivel_estudio_7`), na.rm = TRUE),
            proporcion_nivel_estudio_8 = sum(`nivel_estudio_8` == 1, na.rm = TRUE) / sum(!is.na(`nivel_estudio_8`), na.rm = TRUE),
            proporcion_nivel_estudio_9 = sum(`nivel_estudio_9` == 1, na.rm = TRUE) / sum(!is.na(`nivel_estudio_9`), na.rm = TRUE),
            proporcion_nivel_estudio_10 = sum(`nivel_estudio_10` == 1, na.rm = TRUE) / sum(!is.na(`nivel_estudio_10`), na.rm = TRUE)
          ) %>% as_tibble()

# Eliminamos el barrio desconocido

db_escolaridad <- db_escolaridad %>% 
  filter(encuesta_calidad.barrio != "DESCONOCIDO")

Escritura de los datos

write_excel_csv2(db_escolaridad, "databases/db_escolaridad.csv")

Descripcion de las variables seleccionadas

Es importante considerar que la variable “edad_promedio” no necesariamente hace referencia a la dimensión de escolaridad, sin embargo, se quiere realizar un contraste entre la variable “edad_promedio” y las demás variables para extraer información y hacer validaciones empíricas.

Analisis preliminar de los datos

Medias, cuartiles y desviaciones estándar

summary(db_escolaridad)
##  encuesta_calidad.barrio encuesta_calidad.comuna       n         
##  Length:308              Length:308              Min.   :   4.0  
##  Class :character        Class :character        1st Qu.: 348.8  
##  Mode  :character        Mode  :character        Median : 862.5  
##                                                  Mean   :1073.2  
##                                                  3rd Qu.:1439.0  
##                                                  Max.   :8987.0  
##  edad_promedio   proporcion_lectoescritura proporcion_escolaridad_actual
##  Min.   :23.00   Min.   :0.6667            Min.   :0.1000               
##  1st Qu.:32.98   1st Qu.:0.8809            1st Qu.:0.2383               
##  Median :36.20   Median :0.9125            Median :0.2638               
##  Mean   :36.88   Mean   :0.9079            Mean   :0.2623               
##  3rd Qu.:40.69   3rd Qu.:0.9421            3rd Qu.:0.2889               
##  Max.   :58.25   Max.   :1.0000            Max.   :0.5000               
##  estudio_ultimo_ano proporcion_instituciones_publicas
##  Min.   :0.00000    Min.   :0.2222                   
##  1st Qu.:0.01565    1st Qu.:0.7326                   
##  Median :0.02206    Median :0.8948                   
##  Mean   :0.02290    Mean   :0.8169                   
##  3rd Qu.:0.02843    3rd Qu.:0.9442                   
##  Max.   :0.11111    Max.   :1.0000                   
##  proporcion_nivel_estudio_0 proporcion_nivel_estudio_1
##  Min.   :0.00000            Min.   :0.00000           
##  1st Qu.:0.07585            1st Qu.:0.06916           
##  Median :0.12006            Median :0.11016           
##  Mean   :0.12759            Mean   :0.11103           
##  3rd Qu.:0.16647            3rd Qu.:0.14499           
##  Max.   :0.45455            Max.   :0.25397           
##  proporcion_nivel_estudio_2 proporcion_nivel_estudio_3
##  Min.   :0.05263            Min.   :0.00000           
##  1st Qu.:0.19048            1st Qu.:0.06058           
##  Median :0.25095            Median :0.07895           
##  Mean   :0.23695            Mean   :0.07716           
##  3rd Qu.:0.28760            3rd Qu.:0.09458           
##  Max.   :0.52381            Max.   :0.25000           
##  proporcion_nivel_estudio_4 proporcion_nivel_estudio_5
##  Min.   :0.09091            Min.   :0.00000           
##  1st Qu.:0.20988            1st Qu.:0.03508           
##  Median :0.24640            Median :0.04964           
##  Mean   :0.24372            Mean   :0.04925           
##  3rd Qu.:0.27755            3rd Qu.:0.06209           
##  Max.   :0.50000            Max.   :0.13333           
##  proporcion_nivel_estudio_6 proporcion_nivel_estudio_7
##  Min.   :0.00000            Min.   :0.00000           
##  1st Qu.:0.01568            1st Qu.:0.02220           
##  Median :0.03062            Median :0.05376           
##  Mean   :0.03364            Mean   :0.09698           
##  3rd Qu.:0.04996            3rd Qu.:0.14323           
##  Max.   :0.11111            Max.   :0.36842           
##  proporcion_nivel_estudio_8 proporcion_nivel_estudio_9
##  Min.   :0.0000000          Min.   :0.0000000         
##  1st Qu.:0.0004705          1st Qu.:0.0000000         
##  Median :0.0041754          Median :0.0009129         
##  Mean   :0.0161616          Mean   :0.0061769         
##  3rd Qu.:0.0198397          3rd Qu.:0.0064606         
##  Max.   :0.1225364          Max.   :0.0727763         
##  proporcion_nivel_estudio_10
##  Min.   :0.000000           
##  1st Qu.:0.000000           
##  Median :0.000000           
##  Mean   :0.001348           
##  3rd Qu.:0.001084           
##  Max.   :0.024691

Desviaciones estándar

db_escolaridad %>% select_if(is.numeric) %>% 
  apply(2, sd)
##                                 n                     edad_promedio 
##                      1.019528e+03                      5.418267e+00 
##         proporcion_lectoescritura     proporcion_escolaridad_actual 
##                      4.521456e-02                      4.694050e-02 
##                estudio_ultimo_ano proporcion_instituciones_publicas 
##                      1.343127e-02                      1.811589e-01 
##        proporcion_nivel_estudio_0        proporcion_nivel_estudio_1 
##                      6.288825e-02                      5.129729e-02 
##        proporcion_nivel_estudio_2        proporcion_nivel_estudio_3 
##                      7.227418e-02                      2.751268e-02 
##        proporcion_nivel_estudio_4        proporcion_nivel_estudio_5 
##                      4.962019e-02                      2.082606e-02 
##        proporcion_nivel_estudio_6        proporcion_nivel_estudio_7 
##                      2.218821e-02                      9.975298e-02 
##        proporcion_nivel_estudio_8        proporcion_nivel_estudio_9 
##                      2.558032e-02                      1.158639e-02 
##       proporcion_nivel_estudio_10 
##                      3.221845e-03

Dada la información sobre las medias arrojada para cada variable, hay que resaltar que la proporción de personas con habilidades lecto-escritoras es alta con un 0.907902, la cual es una cifra positiva pues muestra que en la población no hay analfabetismo crítico.

Por otro lado, las proporción de personas que estudiaron en el último año tambien es baja, pero no se debe concluir que esto es necesariamente negativo. Cabe la posibilidad que varias personas en un determinado barrio sean trabajadores y por tanto no dedican mas tiempo al estudio a partir de cierto momento de su vida.

>>>>>>> CONCLUIR NIVEL DE ESTUDIO AQUI <<<<<<<

Graficas

Correlaciones y análisis de distribuciones

ggpairs(data = db_escolaridad %>% 
          dplyr::select(-n, -encuesta_calidad.barrio, -encuesta_calidad.comuna),
        columns = 1:ncol(db_escolaridad %>% 
          dplyr::select(-n, -encuesta_calidad.barrio, -encuesta_calidad.comuna)),
        mapping = aes(alpha = 0.5))

De la gráfica anterior, se debe resaltar significativamente las correlaciones entre las variables “edad_promedio” con las variables “proporcion_lectoescritura” y “proporcion_escolaridad_actual”. Note que la “edad_promedio” esta correlacionada de manera directa con la variable “proporcion_lectoescritura” y de manera inversa con la variable “proporcion_escolaridad_actual”. Esta información que se obtiene coincide con el conocimiento epírico, pues por un lado, las personas con mayor edad tienen mas probabilidad de tener como mínimo una educación primaria, obteniendo así mas habilidades lecto-escritoras, mientras que por otro lado a medida que las personas envejecen dejan de educarse y pasan a ambientes mas laborales.

Por otro lado, note que en los barrios las personas tienen tendencia a educarse en establecimientos de índole pública debido a su fácil acceso.

Valores tipicos

ggplot(data = db_escolaridad) +
  geom_histogram(mapping = aes(x = proporcion_lectoescritura), binwidth = 0.002)

ggplot(data = db_escolaridad,
       mapping = aes(x = proporcion_escolaridad_actual)) +
  geom_histogram(binwidth = 0.002)

ggplot(data = db_escolaridad,
       mapping = aes(x = estudio_ultimo_ano)) +
  geom_histogram(binwidth = 0.0005)

Escalamiento de datos

db_escolaridad_escalado <- db_escolaridad %>% 
  mutate_at(vars(-n, -encuesta_calidad.barrio, -encuesta_calidad.comuna), scale)

Aplicación de PCA PCA AQUI <==================================

Agrupamiento mediante K-means

Selección del \(K\) óptimo (Gráfica de codo)

datos_escalados_agrupamiento <- db_escolaridad_escalado %>% 
  dplyr::select(-n, -encuesta_calidad.barrio, -encuesta_calidad.comuna)

k_maximo <- 15

wss <- sapply(1:k_maximo, 
              function(k) {
                kmeans(datos_escalados_agrupamiento, k, nstart = 10, iter.max = 15 )$tot.withinss
              })

plot(1:k_maximo, wss,
     type="b", pch = 19, frame = FALSE, 
     xlab="Número de grupos [K]",
     ylab="Total de suma de cuadrados intra-grupos")

k_optimo_kmeans <- 8

Agrupamiento con \(K\) óptimo

agrupamiento_kmeans <- kmeans(datos_escalados_agrupamiento, centers = k_optimo_kmeans, nstart = 10, iter.max = 15 )

Mapa para el agrupamiento mediante K-means

political <- shapefile("Barrio_Vereda/Barrio_Vereda.shp")
Encoding(political@data$NOMBRE) <- "UTF-8"
political$NOMBRE <- political$NOMBRE %>% toupper() %>% str_replace("DE  MESA", "DE MESA")

grupos_barrios <- data.frame(barrio_nombre = db_escolaridad$encuesta_calidad.barrio, grupo = agrupamiento_kmeans$cluster)
nombres_mapa <- data.frame(nombre_barrio = political$NOMBRE)

vector_nombres = c()
vector_grupos = c()

for(nombre_mapa in nombres_mapa$nombre_barrio) {
  grupo <- grupos_barrios[grupos_barrios$barrio_nombre == nombre_mapa, 2][1]
  vector_nombres <- c(vector_nombres, nombre_mapa)
  vector_grupos <- c(vector_grupos, grupo)
}

mapa_grupos <- data.frame(
  nombre_barrio = vector_nombres, 
  grupo = vector_grupos
)

factpal <- colorFactor(rainbow(k_optimo_kmeans), mapa_grupos$grupo)

leaflet(data = political) %>% 
  addTiles() %>% 
  addProviderTiles(providers$OpenStreetMap) %>% 
  addPolygons(fill = TRUE, stroke = TRUE, weight = 2, color = ~factpal(mapa_grupos$grupo), 
              label = as.character(political$NOMBRE),
              popup = as.character(political$NOMBRE)) %>% 
  addLegend("bottomright", colors = "#03F", labels = "Barrios y veredas")

Agrupamiento Jerárquico

cantidad_grupos_jerarquico <- 9

distancia <- dist(datos_escalados_agrupamiento)
agrupamiento <- hclust(distancia, method = "complete")
arbol_corte <- cutree(agrupamiento, k = cantidad_grupos_jerarquico)

split_db_escolaridad <- split(db_escolaridad, arbol_corte)

Seleccion de los grupos

summary(split_db_escolaridad$`1`)
##  encuesta_calidad.barrio encuesta_calidad.comuna       n       
##  Length:127              Length:127              Min.   :  25  
##  Class :character        Class :character        1st Qu.: 410  
##  Mode  :character        Mode  :character        Median :1084  
##                                                  Mean   :1401  
##                                                  3rd Qu.:2012  
##                                                  Max.   :8987  
##  edad_promedio   proporcion_lectoescritura proporcion_escolaridad_actual
##  Min.   :27.07   Min.   :0.7947            Min.   :0.1802               
##  1st Qu.:31.08   1st Qu.:0.8622            1st Qu.:0.2586               
##  Median :32.86   Median :0.8804            Median :0.2837               
##  Mean   :32.81   Mean   :0.8779            Mean   :0.2805               
##  3rd Qu.:34.85   3rd Qu.:0.8947            3rd Qu.:0.2993               
##  Max.   :37.86   Max.   :0.9202            Max.   :0.3600               
##  estudio_ultimo_ano proporcion_instituciones_publicas
##  Min.   :0.00000    Min.   :0.8367                   
##  1st Qu.:0.01986    1st Qu.:0.9270                   
##  Median :0.02469    Median :0.9447                   
##  Mean   :0.02535    Mean   :0.9409                   
##  3rd Qu.:0.02981    3rd Qu.:0.9639                   
##  Max.   :0.06250    Max.   :1.0000                   
##  proporcion_nivel_estudio_0 proporcion_nivel_estudio_1
##  Min.   :0.09302            Min.   :0.07171           
##  1st Qu.:0.14480            1st Qu.:0.12181           
##  Median :0.16396            Median :0.14314           
##  Mean   :0.16953            Mean   :0.14933           
##  3rd Qu.:0.18755            3rd Qu.:0.16953           
##  Max.   :0.30000            Max.   :0.25397           
##  proporcion_nivel_estudio_2 proporcion_nivel_estudio_3
##  Min.   :0.2190             Min.   :0.03226           
##  1st Qu.:0.2750             1st Qu.:0.07721           
##  Median :0.2880             Median :0.08794           
##  Mean   :0.2896             Mean   :0.08792           
##  3rd Qu.:0.3053             3rd Qu.:0.09861           
##  Max.   :0.3690             Max.   :0.13546           
##  proporcion_nivel_estudio_4 proporcion_nivel_estudio_5
##  Min.   :0.1200             Min.   :0.00000           
##  1st Qu.:0.1913             1st Qu.:0.03073           
##  Median :0.2206             Median :0.04044           
##  Mean   :0.2174             Mean   :0.04130           
##  3rd Qu.:0.2425             3rd Qu.:0.05263           
##  Max.   :0.2847             Max.   :0.07442           
##  proporcion_nivel_estudio_6 proporcion_nivel_estudio_7
##  Min.   :0.00000            Min.   :0.000000          
##  1st Qu.:0.01023            1st Qu.:0.009695          
##  Median :0.01630            Median :0.022305          
##  Mean   :0.01770            Mean   :0.024865          
##  3rd Qu.:0.02433            3rd Qu.:0.035796          
##  Max.   :0.05738            Max.   :0.090090          
##  proporcion_nivel_estudio_8 proporcion_nivel_estudio_9
##  Min.   :0.0000000          Min.   :0.0000000         
##  1st Qu.:0.0000000          1st Qu.:0.0000000         
##  Median :0.0009242          Median :0.0000000         
##  Mean   :0.0017172          Mean   :0.0005821         
##  3rd Qu.:0.0029685          3rd Qu.:0.0005925         
##  Max.   :0.0111888          Max.   :0.0064516         
##  proporcion_nivel_estudio_10
##  Min.   :0.0000000          
##  1st Qu.:0.0000000          
##  Median :0.0000000          
##  Mean   :0.0001196          
##  3rd Qu.:0.0000000          
##  Max.   :0.0027972
summary(split_db_escolaridad$`6`)
##  encuesta_calidad.barrio encuesta_calidad.comuna       n        
##  Length:4                Length:4                Min.   : 4.00  
##  Class :character        Class :character        1st Qu.:16.75  
##  Mode  :character        Mode  :character        Median :23.00  
##                                                  Mean   :20.75  
##                                                  3rd Qu.:27.00  
##                                                  Max.   :33.00  
##  edad_promedio   proporcion_lectoescritura proporcion_escolaridad_actual
##  Min.   :32.75   Min.   :0.9200            Min.   :0.2381               
##  1st Qu.:35.73   1st Qu.:0.9443            1st Qu.:0.2695               
##  Median :39.03   Median :0.9610            Median :0.3218               
##  Mean   :39.28   Mean   :0.9605            Mean   :0.3454               
##  3rd Qu.:42.58   3rd Qu.:0.9773            3rd Qu.:0.3977               
##  Max.   :46.33   Max.   :1.0000            Max.   :0.5000               
##  estudio_ultimo_ano proporcion_instituciones_publicas
##  Min.   :0          Min.   :0.8182                   
##  1st Qu.:0          1st Qu.:0.8795                   
##  Median :0          Median :0.9500                   
##  Mean   :0          Mean   :0.9295                   
##  3rd Qu.:0          3rd Qu.:1.0000                   
##  Max.   :0          Max.   :1.0000                   
##  proporcion_nivel_estudio_0 proporcion_nivel_estudio_1
##  Min.   :0.00000            Min.   :0.00000           
##  1st Qu.:0.02273            1st Qu.:0.03571           
##  Median :0.03896            Median :0.06926           
##  Mean   :0.04948            Mean   :0.07463           
##  3rd Qu.:0.06571            3rd Qu.:0.10818           
##  Max.   :0.12000            Max.   :0.16000           
##  proporcion_nivel_estudio_2 proporcion_nivel_estudio_3
##  Min.   :0.3333             Min.   :0.00000           
##  1st Qu.:0.3533             1st Qu.:0.03571           
##  Median :0.4300             Median :0.05411           
##  Mean   :0.4293             Mean   :0.05706           
##  3rd Qu.:0.5060             3rd Qu.:0.07545           
##  Max.   :0.5238             Max.   :0.12000           
##  proporcion_nivel_estudio_4 proporcion_nivel_estudio_5
##  Min.   :0.1429             Min.   :0.00000           
##  1st Qu.:0.1494             1st Qu.:0.00000           
##  Median :0.1758             Median :0.02381           
##  Mean   :0.1861             Mean   :0.03463           
##  3rd Qu.:0.2125             3rd Qu.:0.05844           
##  Max.   :0.2500             Max.   :0.09091           
##  proporcion_nivel_estudio_6 proporcion_nivel_estudio_7
##  Min.   :0.00000            Min.   :0.00000           
##  1st Qu.:0.00000            1st Qu.:0.03571           
##  Median :0.01515            Median :0.08442           
##  Mean   :0.03139            Mean   :0.10471           
##  3rd Qu.:0.04654            3rd Qu.:0.15341           
##  Max.   :0.09524            Max.   :0.25000           
##  proporcion_nivel_estudio_8 proporcion_nivel_estudio_9
##  Min.   :0.000000           Min.   :0.00000           
##  1st Qu.:0.000000           1st Qu.:0.00000           
##  Median :0.000000           Median :0.02000           
##  Mean   :0.007576           Mean   :0.02515           
##  3rd Qu.:0.007576           3rd Qu.:0.04515           
##  Max.   :0.030303           Max.   :0.06061           
##  proporcion_nivel_estudio_10
##  Min.   :0                  
##  1st Qu.:0                  
##  Median :0                  
##  Mean   :0                  
##  3rd Qu.:0                  
##  Max.   :0

Mapa geográfico usando el agrupamiento (Agrupamiento Jerárquico)

political <- shapefile("Barrio_Vereda/Barrio_Vereda.shp")
Encoding(political@data$NOMBRE) <- "UTF-8"
political$NOMBRE <- political$NOMBRE %>% toupper() %>% str_replace("DE  MESA", "DE MESA")

grupos_barrios <- data.frame(barrio_nombre = db_escolaridad$encuesta_calidad.barrio, grupo = arbol_corte)
nombres_mapa <- data.frame(nombre_barrio = political$NOMBRE)

vector_nombres = c()
vector_grupos = c()

for(nombre_mapa in nombres_mapa$nombre_barrio) {
  grupo <- grupos_barrios[grupos_barrios$barrio_nombre == nombre_mapa, 2][1]
  vector_nombres <- c(vector_nombres, nombre_mapa)
  vector_grupos <- c(vector_grupos, grupo)
}

mapa_grupos <- data.frame(
  nombre_barrio = vector_nombres, 
  grupo = vector_grupos
)

# Modificación manual de barrios repetidos 



factpal <- colorFactor(rainbow(cantidad_grupos_jerarquico), mapa_grupos$grupo)

leaflet(data = political) %>% 
  addTiles() %>% 
  addProviderTiles(providers$OpenStreetMap) %>% 
  addPolygons(fill = TRUE, stroke = TRUE, weight = 2, color = ~factpal(mapa_grupos$grupo), 
              label = as.character(political$NOMBRE),
              popup = as.character(political$NOMBRE)) %>% 
  addLegend("bottomright", colors = "#03F", labels = "Barrios y veredas")